Add Geometry
Add Geometry
You can add geometry features in map from geojson data using Layers. Check out the below code to add layers in map
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import com.mapbox.geojson.Feature
import com.mapbox.mapboxsdk.Mapbox
import com.mapbox.mapboxsdk.camera.CameraUpdateFactory
import com.mapbox.mapboxsdk.geometry.LatLng
import com.mapbox.mapboxsdk.maps.MapView
import com.mapbox.mapboxsdk.maps.MapboxMap
import com.mapbox.mapboxsdk.style.layers.FillLayer
import com.mapbox.mapboxsdk.style.layers.LineLayer
import com.mapbox.mapboxsdk.style.layers.Property
import com.mapbox.mapboxsdk.style.layers.PropertyFactory
import com.mapbox.mapboxsdk.style.sources.GeoJsonSource
class GeometryMapActivity : AppCompatActivity() {
    private lateinit   var map: MapboxMap
    private lateinit var mapView: MapView
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        Mapbox.getInstance(this)
        setContentView(R.layout.activity_geometry_map)
        //map style name for style link
        val styleId = "osm-liberty"
        // get the api key from barikoi developer panel https://developer.barikoi.com
        val apiKey = getString(R.string.barikoi_api_key)
        // Build the style URL
        val styleUrl = "https://map.barikoi.com/styles/$styleId/style.json?key=$apiKey"
        //geometry geosjon data
        val geometryjson = """
            {
                "type": "Feature",
                "properties": {},
                "geometry":
                {
                  "type": "Polygon",
                  "coordinates": [
                    [
                        [90.4245719514072,23.8498893170947],[90.4162572277404,23.8593578587565],
                        [90.4063700498334,23.8578960563255],[90.406494,23.852892],
                        [90.400035,23.860683],[90.3924952036647,23.8614377480597],
                        [90.3852827038556,23.856767705799],[90.393448,23.845689],
                        [90.3927183589261,23.8419405320778],[90.4014731602744,23.8310647094072],
                        [90.4070952270173,23.8308912076182],[90.4180521159278,23.8383449571236],
                        [90.4223406961995,23.8431574279637],[90.421858,23.846121],
                        [90.4245719514072,23.8498893170947]
                      ]
                    
                  ]
                }
            }
         """
        //create feature object from the Geojson
        val feature = Feature.fromJson(geometryjson)
        // Create map view
        mapView= findViewById(R.id.mapView)
        mapView.onCreate(savedInstanceState)
        mapView.getMapAsync { map ->
            this.map =map
            // Set the style after mapView was loaded
            map.setStyle(styleUrl){style->
                // Create a GeoJson Source from our feature.
                val geojsonSource = GeoJsonSource("dhaka-airport", feature)
                // Add the source to the style
                style.addSource(geojsonSource)
                // Add layer on map using the Geojson Source
                val layer = LineLayer("dhaka-airport-line", "dhaka-airport")
                    .withProperties(
                        PropertyFactory.lineCap(Property.LINE_CAP_SQUARE),
                        PropertyFactory.lineJoin(Property.LINE_JOIN_MITER),
                        PropertyFactory.lineOpacity(1.0f),
                        PropertyFactory.lineWidth(5f),
                        PropertyFactory.lineColor("#0094ff")
                    )
                val filllayer = FillLayer("dhaka-airport-fill", "dhaka-airport")
                    .withProperties(
                        PropertyFactory.fillColor("#009fff"),
                        PropertyFactory.fillOpacity(0.5f)
                    )
                // Add the layer at the end
                style.addLayer(layer)
                style.addLayer(filllayer)
                //set camera on the layer
                map.moveCamera(CameraUpdateFactory.newLatLngZoom(LatLng( 23.845689, 90.393448), 14.0))
            }
        }
    }
    override fun onStart() {
        super.onStart()
        mapView.onStart()
    }
    override fun onResume() {
        super.onResume()
        mapView.onResume()
    }
    override fun onPause() {
        super.onPause()
        mapView.onPause()
    }
    override fun onStop() {
        super.onStop()
        mapView.onStop()
    }
    override fun onLowMemory() {
        super.onLowMemory()
        mapView.onLowMemory()
    }
    override fun onDestroy() {
        super.onDestroy()
        mapView.onDestroy()
    }
}